/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
import config from "@/api/config";
import axios from 'axios'
import {
    Toast
} from 'vant'

axios.defaults.baseURL = config.baseUrl.dev // 运行
    // axios.defaults.headers.post['Content-Type'] = 'application/json, text/plain, */*'
    // axios.defaults.headers.post['Accept'] = 'application/json, text/plain, */*'

axios.defaults.timeout = 10000

// 请求拦截器
axios.interceptors.request.use(
    config => {
        console.log('config', config)
        let userInfo = sessionStorage.getItem('userInfo');
        if (userInfo) {
            config.headers['userId'] = JSON.parse(sessionStorage.getItem('userInfo')).id
                // config.headers['userId'] = 4
        }
        if (config.url === '/api/qiniu/upload/token?') {
            config.headers['Content-Type'] = 'multipart/form-data'
        }
        config.data = {
            ...config.data,
        }
        return config
    },
    error => {
        return Promise.error(error)
    })

function errorMessage(error) {
    switch (error.message.code) {
        //登录失效或未登录
        case 'err.1000':
            Toast({
                message: error.message.content,
                duration: 1000,
                forbidClick: true
            })
            break
            // 404请求不存在
        case 404:
            Toast({
                message: '网络请求不存在',
                duration: 1500,
                forbidClick: true
            })
            break
            // 其他错误，直接抛出错误提示
        default:
            Toast({
                message: error.message,
                duration: 1500,
                forbidClick: true
            })
    }
}

// 响应拦截器
axios.interceptors.response.use(
    response => {
        if (response.data.code === 200) {
            return Promise.resolve(response)
        } else {
            errorMessage(response.data)
            return Promise.reject(response)
        }
    },
    // 服务器状态码不是200的情况
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                case 404:
                    Toast({
                        message: '网络请求不存在',
                        duration: 1500,
                        forbidClick: true
                    })
                    break
                    // 其他错误，直接抛出错误提示
                default:
                    Toast({
                        message: error.response.data.message,
                        duration: 1500,
                        forbidClick: true
                    })
            }
            return Promise.reject(error.response)
        } else {
            Toast({
                message: error.response.data.message,
                duration: 1500,
                forbidClick: true
            })
        }
    }
)

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {String} urlParam [请求的url参数]
 * @param {Object} params [请求时携带的参数]
 *
 */
export function get(url, urlParam, params) {
    console.log(url);
    return new Promise((resolve, reject) => {
        axios.get(url + '?' + urlParam, {
                params: {
                    ...params
                },
            })
            .then((res) => {
                console.log("res", res.data);
                resolve(res.data)
            })
            .catch((error) => {
                reject(error.data)
            })
    })
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */

export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url, params)
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err.data)
            })
    })
}

export const url = axios.defaults.baseURL